MCPcopy Create free account
hub / github.com/Rfym21/Qwen2API

github.com/Rfym21/Qwen2API @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
360 symbols 1,098 edges 51 files 105 documented · 29% updated 10d agov26.09.11.16.00 · 2026-09-11★ 79624 open issues

Browse by type

Functions 346 Types & classes 14
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

中文 | 🇷🇺 Русская версия | English

🚀 Qwen-Proxy

Version Bun Docker

🔗 Присоединиться к чату | 📖 Документация | 🐳 Развертывание Docker

🛠️ Быстрый старт

Описание проекта

Qwen-Proxy — это прокси-сервис, преобразующий https://chat.qwen.ai и Qwen Code / Qwen Cli в API, совместимый с OpenAI. С помощью этого проекта вам нужен всего один аккаунт, чтобы использовать любой клиент с поддержкой OpenAI API (например, ChatGPT-Next-Web, LobeChat и др.) для вызова различных моделей https://chat.qwen.ai и Qwen Code / Qwen Cli. Модели в эндпоинте /cli предоставляются Qwen Code / Qwen Cli, поддерживают контекст 256K и нативный параметр tools.

Основные возможности: - Совместимость с форматом OpenAI API, бесшовная интеграция с различными клиентами - Поддержка ротации нескольких аккаунтов для повышения доступности - Поддержка потоковых/непотоковых ответов - Поддержка мультимодальности (распознавание изображений, генерация изображений) - Поддержка интеллектуального поиска, глубокого размышления и других продвинутых функций - Поддержка CLI-эндпоинта с контекстом 256K и возможностью вызова инструментов - Веб-интерфейс управления для удобной настройки и мониторинга - Массовое добавление аккаунтов с отображением прогресса в реальном времени, параллельность входа настраивается в системных настройках

⚠️ Примечание о высокой нагрузке

Важно: chat.qwen.ai ограничивает скорость запросов по IP. Известно, что это ограничение не связано с Cookie, а только с IP-адресом.

Решения:

Для высоконагруженного использования рекомендуется применять пул прокси для ротации IP:

Вариант Способ настройки Описание
Вариант 1 PROXY_URL + ProxyFlow Прямая настройка прокси-адреса, все запросы проходят через пул с ротацией IP
Вариант 2 QWEN_CHAT_PROXY_URL + UrlProxy + ProxyFlow Комбинация обратного прокси + пул прокси для более гибкой ротации IP

Примеры настройки:

# Вариант 1: Прямое использование пула прокси
PROXY_URL=http://127.0.0.1:8282  # Адрес ProxyFlow

# Вариант 2: Обратный прокси + пул прокси
QWEN_CHAT_PROXY_URL=http://127.0.0.1:8000/qwen  # Адрес обратного прокси UrlProxy (UrlProxy настроен с HTTP_PROXY на ProxyFlow)

🌐 Прокси для каждого аккаунта / Per-account proxy

Каждому аккаунту можно назначить собственный исходящий прокси, чтобы разные аккаунты ходили с разных IP одновременно и не попадали под массовый бан chat.qwen.ai по корреляции IP.

Приоритет: account.proxy > глобальный PROXY_URL > без прокси

Поддерживаемые протоколы: HTTP / HTTPS / SOCKS5 (как у PROXY_URL)

Через панель (рекомендуется): Откройте dashboard → при добавлении аккаунта заполните поле «Proxy URL», либо нажмите кнопку «Изменить proxy» на карточке существующего аккаунта.

Через ENV (DATA_SAVE_MODE=none):

# Старый формат (обратная совместимость, прокси не задан)
ACCOUNTS=user1@mail.com:pass1,user2@mail.com:pass2

# Новый формат (URL прокси через `|`, можно смешивать со старым)
ACCOUNTS=user1@mail.com:pass1|http://10.0.0.1:8080,user2@mail.com:pass2|socks5://10.0.0.2:1080

Схема data/data.json (file-режим):

{
  "accounts": [
    {
      "email": "user@mail.com",
      "password": "...",
      "token": "...",
      "expires": 1234567890,
      "proxy": "http://10.0.0.1:8080"
    }
  ]
}

Если поле proxy равно null или отсутствует, аккаунт ходит через глобальный PROXY_URL (если он задан).

⚠️ Внимание: прокси-URL в ответах API не маскируются. Проект рассчитан на запуск в доверенной локальной/частной сети с единственным администратором.

Требования к окружению

  • Bun 1.3.14+ (для запуска из исходников; Docker использует 1.3.14)
  • Node.js 24+ (только для тестов и lint при разработке, не нужен в production-образе)
  • Docker (опционально)
  • Redis (опционально, для персистентного хранения данных)

⚙️ Настройка окружения

Создайте файл .env и настройте следующие параметры:

# 🌐 Конфигурация сервиса
LISTEN_ADDRESS=localhost       # Адрес прослушивания
SERVICE_PORT=3000             # Порт сервиса

# 🔐 Безопасность
API_KEY=sk-123456,sk-456789   # API-ключи (обязательно, поддержка нескольких ключей)
ACCOUNTS=                     # Настройка аккаунтов (формат: user1:pass1[|proxy_url],user2:pass2[|proxy_url])

# 🔍 Конфигурация функций
SEARCH_INFO_MODE=table        # Режим отображения результатов поиска (table/text)
OUTPUT_THINK=true             # Выводить ли процесс размышления (true/false)
LEGACY_REASONING_IN_CONTENT=false # Формат рассуждений: false=поле reasoning_content, true=старый режим <think> внутри content (true/false)
SIMPLE_MODEL_MAP=false        # Упрощенное сопоставление моделей (true/false)
MODELS_CACHE_TTL=3600         # Срок жизни кэша списка моделей (сек), 0=бессрочно
AGENT_TURN_MAX_TOOL_CALLS=24  # Anthropic: лимит tool_use по текстовому каналу за ход агента (4-256), дальше обрыв upstream

# 🌐 Прокси и обратный прокси
QWEN_CHAT_PROXY_URL=          # Пользовательский URL обратного прокси Chat API (по умолчанию: https://chat.qwen.ai)
QWEN_CLI_PROXY_URL=           # Пользовательский URL обратного прокси CLI API (по умолчанию: https://portal.qwen.ai)
PROXY_URL=                    # Адрес HTTP/HTTPS/SOCKS5 прокси (например: http://127.0.0.1:7890)

# 🗄️ Хранение данных
DATA_SAVE_MODE=none           # Режим сохранения данных (none/file/redis)
REDIS_URL=                    # Адрес подключения к Redis (опционально, при TLS используйте rediss://)
BATCH_LOGIN_CONCURRENCY=5     # Параллельность входа при массовом добавлении аккаунтов

# 📸 Конфигурация кэширования
CACHE_MODE=default            # Режим кэширования изображений (default/file)

📋 Описание параметров

Параметр Описание Пример
LISTEN_ADDRESS Адрес прослушивания сервиса localhost или 0.0.0.0
SERVICE_PORT Порт работы сервиса 3000
API_KEY API-ключи доступа, поддержка нескольких ключей. Первый ключ — администраторский (доступ к панели управления), остальные — обычные (только вызов API). Разделяются запятой sk-admin123,sk-user456,sk-user789
SEARCH_INFO_MODE Формат отображения результатов поиска table или text
OUTPUT_THINK Отображать ли процесс размышления AI true или false
LEGACY_REASONING_IN_CONTENT Формат вывода рассуждений. По умолчанию false = рассуждения в отдельном поле reasoning_content; true = старый режим (<think> внутри content) true или false
SIMPLE_MODEL_MAP Упрощенное сопоставление моделей, возвращает только базовые модели без вариантов true или false
MODEL_MAP Сопоставление входящих имён моделей: alias=qwen-id,...,*=fallback. Точное совпадение в приоритете (хвостовой [..] отбрасывается, без учёта регистра), существующие id Qwen проходят без изменений, остальное идёт в *; действует только для /v1/chat/completions и /v1/messages. Редактируется и в панели (Настройки → Сопоставление моделей); сохранённое в панели сопоставление имеет приоритет над этой переменной, см. .env.example *=qwen3.8-max-thinking
MODELS_CACHE_TTL Срок жизни кэша списка моделей (в секундах); по истечении следующий запрос обновит список; 0 = бессрочный кэш 3600
AGENT_TURN_MAX_TOOL_CALLS Путь Anthropic: лимит блоков tool_use по текстовому каналу за один ход агента (4–256). Если модель «идёт вразнос» после нарративного [TOOL CALL] (сотни повторов одного вызова, выдуманная сессия целиком), upstream обрывается сразу после N-го принятого вызова, а принятые вызовы отдаются со stop_reason=tool_use; после уже принятого в более раннем delta вызова дубликат, отклонённый вызов или проза/размышление также обрывают ход 24
QWEN_CHAT_PROXY_URL Пользовательский адрес обратного прокси Chat API https://your-proxy.com
QWEN_CLI_PROXY_URL Пользовательский адрес обратного прокси CLI API https://your-cli-proxy.com
PROXY_URL Адрес прокси для исходящих запросов, поддержка HTTP/HTTPS/SOCKS5 http://127.0.0.1:7890
DATA_SAVE_MODE Способ персистентного хранения данных none/file/redis
REDIS_URL Адрес подключения к Redis, при использовании TLS-шифрования необходим протокол rediss:// redis://localhost:6379 или rediss://xxx.upstash.io
BATCH_LOGIN_CONCURRENCY Параллельность входа при массовом добавлении аккаунтов, можно динамически менять в системных настройках фронтенда 5
CACHE_MODE Способ хранения кэша изображений default/file
LOG_LEVEL Уровень логирования DEBUG/INFO/WARN/ERROR
ENABLE_FILE_LOG Включить ли файловое логирование true или false
LOG_DIR Директория файлов логов ./logs
MAX_LOG_FILE_SIZE Максимальный размер файла лога (МБ) 10
MAX_LOG_FILES Количество сохраняемых файлов логов 5

💡 Подсказка: Можно бесплатно создать экземпляр Redis на Upstash, при использовании протокола TLS адрес имеет формат rediss://...

Upstash Redis

🔑 Настройка нескольких API_KEY

Переменная окружения API_KEY поддерживает настройку нескольких API-ключей для реализации разных уровней доступа:

Формат настройки:

# Один ключ (права администратора)
API_KEY=sk-admin123

# Несколько ключей (первый — администратор, остальные — обычные пользователи)
API_KEY=sk-admin123,sk-user456,sk-user789

Описание прав:

Тип ключа Область прав Описание функций
Администраторский ключ Полные права • Доступ к панели управления

• Изменение системных настроек

• Вызов всех API-эндпоинтов

• Добавление/удаление обычных ключей | | Обычный ключ | Права вызова API | • Только вызов API-эндпоинтов

• Нет доступа к панели управления

• Нет возможности изменять системные настройки |

Сценарии использования: - Командная работа: назначение ключей с разными правами для разных членов команды - Интеграция приложений: предоставление ограниченного API-доступа сторонним приложениям - Разделение безопасности: разделение административных и пользовательских прав

Примечания: - Первый API_KEY автоматически становится администраторским ключом с максимальными правами - Администратор может динамически добавлять или удалять обычные ключи через панель управления - Все ключи могут вызывать API-эндпоинты, различия в правах касаются только функций управления

📸 Описание режимов CACHE_MODE

Переменная окружения CACHE_MODE управляет способом хранения кэша изображений для оптимизации производительности загрузки и обработки:

Режим Описание Сценарий использования
default Кэширование в памяти (по умолчанию) Однопроцессное развертывание, кэш теряется при перезапуске
file Файловое кэширование Многопроцессное развертывание, кэш сохраняется в директорию ./caches/

Рекомендуемая настройка: - Однопроцессное развертывание: используйте CACHE_MODE=default, максимальная производительность - Многопроцессное/кластерное развертывание: используйте CACHE_MODE=file, обеспечивает общий кэш между процессами - Развертывание Docker: рекомендуется CACHE_MODE=file с монтированием директории ./caches

Структура директории файлового кэша:

caches/
├── [signature1].txt    # Файл кэша, содержит URL изображения
├── [signature2].txt
└── ...

🚀 Способы развертывания

🐳 Развертывание Docker

Способ 1: Прямой запуск

docker run -d \
  -p 3000:3000 \
  -e API_KEY=sk-admin123,sk-user456,sk-user789 \
  -e DATA_SAVE_MODE=none \
  -e CACHE_MODE=file \
  -e ACCOUNTS= \
  -v ./caches:/app/caches \
  --name qwen2api \
  rfym21/qwen2api:latest

Способ 2: Docker Compose

# Скачать файл конфигурации
curl -o docker-compose.yml https://raw.githubusercontent.com/Rfym21/Qwen2API/refs/heads/main/docker/docker-compose.yml

# Запустить сервис
docker compose pull && docker compose up -d

📦 Локальное развертывание

# Клонировать проект
git clone https://github.com/Rfym21/Qwen2API.git
cd Qwen2API

# Установить зависимости
bun install --frozen-lockfile
bun install --cwd public --frozen-lockfile
bun run build:frontend

# Настроить переменные окружения
cp .env.example .env
# Отредактировать файл .env

# Запустить один процесс Bun
bun run start

# Режим разработки
bun run dev

Запуск и проверка

Сервис работает в одном процессе Bun. PM2 и автоматический cluster удалены; PM2_INSTANCES и PM2_MAX_MEMORY больше не действуют. Перезапуск задается через Compose restart: always, лимит памяти через mem_limit. Статистика, лимиты и настройки частично хранятся в памяти процесса: нескольким репликам нужна синхронизация.

bun run test сохраняет Node test runner для существующих тестов. bun run test:bun проверяет реальный Bun-сервис с локальным mock upstream: вход, фронтенд, WASM, OpenAI/Anthropic JSON и SSE без реальных аккаунтов. По умолчанию используются исходники. Для сравнения доступен node src/server.js.

Отдельный исполняемый файл

bun run build:binary собирает фронтенд и бинарный файл для текущей системы в pkg_dist/. Для Linux x64: bun run build:binary --target bun-linux-x64 (для Alpine: bun-linux-x64-musl). Кросс-компиляция не заменяет проверку запуска на целевой системе. Проверка Wind

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 237
Method 109
Class 14

Languages

TypeScript100%

Modules by API surface

src/controllers/chat.image.video.js49 symbols
src/utils/account.js44 symbols
src/utils/redis.js28 symbols
src/utils/logger.js22 symbols
src/controllers/anthropic.js21 symbols
src/utils/data-persistence.js19 symbols
src/utils/account-rotator.js19 symbols
src/controllers/chat.js15 symbols
src/utils/chat-helpers.js14 symbols
src/utils/token-manager.js12 symbols
src/controllers/cli.chat.js12 symbols
src/utils/tool-prompt.js11 symbols

For agents

$ claude mcp add Qwen2API \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page